// 页面逻辑
Page({
  // 页面数据
  data: {
    // 新增页面类型标识
    pageType: 'add', // 'add'或'edit'
    // 当前编辑的衣物对象
    editItem: {},
    // 添加提交状态标志
    isSubmitted: false,
    // 添加表单验证状态
    isFormValid: false,
    // 添加临时图片标记
    tempImageId: null,
    // 分类选项数组
    categories: [
      { id: 1, name: '外套' },
      { id: 2, name: '内搭' },
      { id: 3, name: '下装' },
      { id: 4, name: '一体衣' },
      { id: 5, name: '鞋子' },
      { id: 6, name: '装饰' },
      { id: 7, name: '袜子' },
      {id:8,name:'帽子'}
    ],
    
    // 颜色选项数组
    colors: [
      { id: 1, name: '黑色系' },
      { id: 2, name: '白色系' },
      { id: 3, name: '红色系' },
      { id: 4, name: '蓝色系' },
      { id: 5, name: '黄色系' },
      { id: 6, name: '绿色系' },
      { id: 7, name: '紫色系' }
    ],
    
    // 风格选项数组
    styles: [
      { id: 1, name: '休闲' },
      { id: 2, name: '商务' },
      { id: 3, name: '运动' },
      { id: 4, name: '街头' },
      { id: 5, name: '复古' }
    ],
    
    // 季节选项数组
    seasons: [
      { id: 1, name: '春季' },
      { id: 2, name: '夏季' },
      { id: 3, name: '秋季' },
      { id: 4, name: '冬季' }
    ],
    
    // 当前选中的分类
    currentCategory: {},
    
    // 当前选中的颜色
    currentColor: {},
    
    // 当前选中的风格
    currentStyle: {},
    
    // 当前选中的季节
    currentSeason: {}
  },

  /**
   * 生命周期函数--监听页面加载
   * @param {Object} options 页面跳转参数
   */
  onLoad(options) {
    // 从页面参数获取类型，默认为添加
    const pageType = options.type || 'add';
    
    // 从本地存储获取编辑项，设置默认值
    const editItem = pageType === 'edit' ? wx.getStorageSync('tempEditItem') : {
      img: '/images/wx.png',
      categories: '',
      colors: '',
      styles: '',
      seasons: '',
      value: 0
    };
    
    // 初始化表单数据
    this.setData({
      pageType,
      editItem,
      currentCategory: editItem.categories ? 
        this.findSelectedItem(this.findIdByName(editItem.categories, this.data.categories), this.data.categories) : 
        { name: '请选择分类' },
      currentColor: editItem.colors ? 
        this.findSelectedItem(this.findIdByName(editItem.colors, this.data.colors), this.data.colors) : 
        { name: '请选择颜色' },
      currentStyle: editItem.styles ? 
        this.findSelectedItem(this.findIdByName(editItem.styles, this.data.styles), this.data.styles) : 
        { name: '请选择风格' },
      currentSeason: editItem.seasons ? 
        this.findSelectedItem(this.findIdByName(editItem.seasons, this.data.seasons), this.data.seasons) : 
        { name: '请选择季节' }
    });
  },
  /**
   * 检查表单是否有效
   */
  checkFormValid() {
    const {currentCategory, currentColor, currentStyle, currentSeason, editItem } = this.data;
    const isValid = currentCategory.id && 
                  currentColor.id && 
                  currentStyle.id && 
                  currentSeason.id &&
                  editItem.img && editItem.img !== '/images/wx.png';
    this.setData({ isFormValid: !!isValid });
  },

  /**
   * 查找选中项
   * @param {number} id 选项ID
   * @param {Array} list 选项列表
   * @return {Object} 找到的选项对象
   */
  findIdByName(name, list) {
    const item = list.find(item => item.name === name);
    return item ? item.id : 1; // 默认返回1
  },
  /**
   * 查找选中项
   * @param {number} id 选项ID
   * @param {Array} list 选项列表
   * @return {Object} 找到的选项对象
   */
  findSelectedItem(id, list) {
    return list.find(item => item.id === id) || {};
  },
  // 图片选择方法
  async chooseImage() {
    try {
      const res = await wx.chooseMedia({
        count: 1,
        mediaType: ['image'],
        sizeType: ['compressed']
      });

      if (res.tempFiles?.[0]) {
        wx.showLoading({ title: '上传中...' });
        
        // 生成云存储路径
        const ext = res.tempFiles[0].tempFilePath.match(/\.[^.]+?$/)[0];
        const cloudPath = `wardrobe/${this.data.currentStyle.name || 'clothes'}_${Date.now()}${ext}`;

        // 上传到云存储
        const uploadRes = await wx.cloud.uploadFile({
          cloudPath,
          filePath: res.tempFiles[0].tempFilePath
        });

        // 如果是编辑模式且有旧图片，记录旧图片ID
        const oldImageId = this.data.pageType === 'edit' && this.data.editItem.img 
          ? this.data.editItem.img 
          : null;

        // 更新本地数据和存储临时图片ID
        this.setData({ 
          'editItem.img': uploadRes.fileID,
          tempImageId: uploadRes.fileID,
          oldImageId // 保存旧图片ID
        });
        
        wx.showToast({ title: '上传成功', icon: 'success' });
        this.checkFormValid();
      }
    } catch (error) {
      console.error('上传失败:', error);
      wx.showToast({ title: '上传失败', icon: 'error' });
    } finally {
      wx.hideLoading();
    }
  },
  /**
   * 标题变更事件处理
   * @param {Object} e 事件对象
   */
  onTitleChange(e) {
    // 获取当前编辑项
    const { editItem } = this.data;
    // 更新标题
    editItem.style = e.detail.value;
    // 设置数据
    this.setData({ editItem });
    this.checkFormValid();
  },

  /**
   * 分类变更事件处理
   * @param {Object} e 事件对象
   */
  onCategoryChange(e) {
    // 获取分类数组
    const { categories } = this.data;
    // 获取选中的分类
    const currentCategory = categories[e.detail.value];
    // 更新当前分类
    this.setData({ currentCategory });
    this.checkFormValid();
  },

  /**
   * 颜色变更事件处理
   * @param {Object} e 事件对象
   */
  onColorChange(e) {
    // 获取颜色数组
    const { colors } = this.data;
    // 获取选中的颜色
    const currentColor = colors[e.detail.value];
    // 更新当前颜色
    this.setData({ currentColor });
    this.checkFormValid();
  },

  /**
   * 风格变更事件处理
   * @param {Object} e 事件对象
   */
  onStyleChange(e) {
    // 获取风格数组
    const { styles } = this.data;
    // 获取选中的风格
    const currentStyle = styles[e.detail.value];
    // 更新当前风格
    this.setData({ currentStyle });
    this.checkFormValid();
  },

  /**
   * 季节变更事件处理
   * @param {Object} e 事件对象
   */
  onSeasonChange(e) {
    // 获取季节数组
    const { seasons } = this.data;
    // 获取选中的季节
    const currentSeason = seasons[e.detail.value];
    // 更新当前季节
    this.setData({ currentSeason });
    this.checkFormValid();
  },

  /**
   * 评分点击事件处理
   * @param {Object} e 事件对象
   */
  onRateTap(e) {
    // 获取当前编辑项
    const { editItem } = this.data;
    // 获取点击的心形索引
    const index = e.currentTarget.dataset.index;
    // 设置评分值(从1开始)
    editItem.value = index + 1;
    // 更新数据
    this.setData({ editItem });
    this.checkFormValid();
  },

  /**
   * 提交按钮点击事件处理
   */
  async onSubmit() {
    const { editItem, currentCategory, currentColor, currentStyle, currentSeason, pageType, oldImageId } = this.data;
    // 获取用户信息
    const userinfo = wx.getStorageSync('userinfo');
    if (!userinfo || !userinfo._id) {
      wx.showToast({ title: '请先登录', icon: 'error' });
      return;
    }
    // 更新完整数据
    const submitData = {
      ...editItem,
      categories: currentCategory.name,
      colors: currentColor.name,
      styles: currentStyle.name,
      seasons: currentSeason.name,
      time: new Date().toISOString().split('T')[0],
      userid: userinfo._id // 添加用户ID
    };

    try {
      wx.showLoading({ title: '保存中...' });

      // 根据页面类型调用不同云函数
      const result = await wx.cloud.callFunction({
        name: 'clothes',
        data: {
          action: pageType === 'add' ? 'add' : 'update',
          data: submitData,
          _id: pageType === 'edit' ? editItem._id : undefined
        }
      });

      // 检查操作是否成功
      if (result.result.code !== 200) {
        throw new Error(result.result.message || '操作失败');
      }

      // 只有更新成功后才删除旧图片
      if (pageType === 'edit' && oldImageId && oldImageId !== editItem.img) {
        try {
          await wx.cloud.deleteFile({
            fileList: [oldImageId]
          });
          console.log('旧图片删除成功:', oldImageId);
        } catch (deleteErr) {
          console.error('旧图片删除失败:', deleteErr);
        }
      }

      // 设置提交状态为true
      this.setData({    
        isSubmitted: true,
        tempImageId: null,
        oldImageId: null  
      });
      
      wx.showToast({ title: '保存成功', icon: 'success' });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    } catch (err) {
      console.error('保存失败:', err);
      
      // 如果更新失败且是新上传的图片，删除新图片
      if (pageType === 'edit' && oldImageId && oldImageId !== editItem.img) {
        try {
          await wx.cloud.deleteFile({
            fileList: [editItem.img]
          });
          console.log('新图片已删除:', editItem.img);
          
          // 恢复原来的图片
          this.setData({
            'editItem.img': oldImageId
          });
        } catch (deleteErr) {
          console.error('新图片删除失败:', deleteErr);
        }
      }
      
      wx.showToast({ 
        title: '保存失败: ' + (err.message || '未知错误'), 
        icon: 'none',
        duration: 2000
      });
    } finally {
      wx.hideLoading();
    }
  },

  /**
   * 删除按钮点击事件处理
   */
  async onDelete() {
    const { editItem, pageType } = this.data;
    
    const res = await wx.showModal({
      title: '确认删除',
      content: '确定要删除这件衣物吗？删除后无法恢复',
    });

    if (res.confirm) {
      try {
        wx.showLoading({ title: '删除中...' });

        if (pageType === 'edit' && editItem._id) {
          // 调用云函数删除数据
          await wx.cloud.callFunction({
            name: 'clothes',
            data: {
              action: 'delete',
              _id: editItem._id
            }
          });
        }

        // 重置表单数据
        this.setData({
          editItem: {
            img: '/images/wx.png',
            categories: '',
            colors: '',
            styles: '',
            seasons: '',
            value: 0
          },
          currentCategory: { name: '请选择分类' },
          currentColor: { name: '请选择颜色' },
          currentStyle: { name: '请选择风格' },
          currentSeason: { name: '请选择季节' },
          isFormValid: false
        });
        
        wx.showToast({ title: '删除成功', icon: 'success' });
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      } catch (err) {
        console.error('删除失败:', err);
        wx.showToast({ title: '删除失败', icon: 'error' });
      } finally {
        wx.hideLoading();
      }
    }
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    this.cleanTempImage();
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    this.cleanTempImage();
  },

  /**
   * 清理临时图片
   */
  cleanTempImage() {
    if (!this.data.isSubmitted && this.data.tempImageId) {
      wx.cloud.deleteFile({
        fileList: [this.data.tempImageId]
      }).then(() => {
        console.log('临时图片已删除:', this.data.tempImageId);
        wx.showToast({ title: '临时图片已删除', icon: 'success' });
      }).catch(error => {
        console.error('删除失败:', error);
        wx.showToast({ title: '删除失败', icon: 'error' });
      });
    }
  }

});